package com.dmall.promotion.annotation;

import com.dmall.promotion.enums.UserOperationEnum;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 用于监听用户操作类型的注解
 * 可以监听多个用户操作
 * @author xiao1.wang
 * @date 2021-06-03 22:08:04
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ListenUserOperation {
    /**
     * 监听用户操作有哪些
     * @return 操作类型数组
     */
    UserOperationEnum[] value();

    /**
     * 是否同步执行，默认异步执行
     * 同步先于异步执行
     * 所有同步的handler执行完成以后才会执行异步的handler
     * @return true/false
     */
    boolean sync() default false;

    /**
     * 优先级，优先级的值越小，越先执行
     * @return 优先级值
     */
    int order() default 100;
}
